binary search ternary search *1600

Please click on ads to support us..

C++ Code:

#include <algorithm>
#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <queue>

#define EPSILON 1e-7

using namespace std;

bool canMeet(vector<int> a, vector<int> v, int N, double t) {
    vector<pair<double, int>> events;
    for (int i = 0; i < N; i++) {
        events.push_back({a[i] - v[i] * t, 1});
        events.push_back({a[i] + v[i] * t, -1});
    }

    sort(events.begin(), events.end(), [](const pair<double, int>& a, const pair<double, int> &b) {
        if (abs(a.first - b.first) < EPSILON) {
            return a.second > b.second;
        } else {
            return a.first < b.first;
        }
    });

    int overlap_max = 0, overlap = 0;
    for (auto it = events.begin(); it != events.end(); it++) {
        overlap += it->second;
        overlap_max = max(overlap_max, overlap);
    }

    return overlap_max == N;
}

// https://codeforces.com/contest/782/problem/B
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    // freopen("meeting-places.in", "r", stdin);
    // freopen("meeting-places.out", "w", stdout);

    int N;
    cin >> N;
    vector<int> a(N), v(N);
    for (int i = 0; i < N; i++) {
        cin >> a[i];
    }

    for (int i = 0; i < N; i++) {
        cin >> v[i];
    }

    double low = 0;
    double high = 1e12;
    while (abs(high - low) > EPSILON) {
        double mid = low + (high - low) / 2;
        if (canMeet(a, v, N, mid)) {
            high = mid;
        } else {
            low = mid + EPSILON;
        }
    }

    size_t len = 100;
    char chs[len];
    snprintf(chs, len, "%.6f", low);
    cout << chs << endl;
 }


Comments

Submit
0 Comments
More Questions

1342A - Road To Zero
1520A - Do Not Be Distracted
352A - Jeff and Digits
1327A - Sum of Odd Integers
1276A - As Simple as One and Two
812C - Sagheer and Nubian Market
272A - Dima and Friends
1352C - K-th Not Divisible by n
545C - Woodcutters
1528B - Kavi on Pairing Duty
339B - Xenia and Ringroad
189A - Cut Ribbon
1182A - Filling Shapes
82A - Double Cola
45A - Codecraft III
1242A - Tile Painting
1663E - Are You Safe
1663D - Is it rated - 3
1311A - Add Odd or Subtract Even
977F - Consecutive Subsequence
939A - Love Triangle
755A - PolandBall and Hypothesis
760B - Frodo and pillows
1006A - Adjacent Replacements
1195C - Basketball Exercise
1206A - Choose Two Numbers
1438B - Valerii Against Everyone
822A - I'm bored with life
9A - Die Roll
1430B - Barrels